--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit 93839f047652a3c19addc41148b89c683ce7747a
Parents : 2840ddf
Author : Sudo-Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-01-01T22:44:44-06:00
feat(map): implement export cancellation functionality in MapManager class
Changes
Diff
diff --git a/meshchatx/src/backend/map_manager.py b/meshchatx/src/backend/map_manager.py
index 48900318..745208ed 100644
--- a/meshchatx/src/backend/map_manager.py
+++ b/meshchatx/src/backend/map_manager.py
@@ -15,6 +15,7 @@ class MapManager:
self._local = threading.local()
self._metadata_cache = None
self._export_progress = {}
+ self._export_cancelled = set()
def get_connection(self, path):
if not hasattr(self._local, "connections"):
@@ -158,6 +159,21 @@ class MapManager:
def get_export_status(self, export_id):
return self._export_progress.get(export_id)
+ def cancel_export(self, export_id):
+ if export_id in self._export_progress:
+ self._export_cancelled.add(export_id)
+ # If it's already failed or completed, just clean up
+ status = self._export_progress[export_id].get("status")
+ if status in ["completed", "failed"]:
+ file_path = self._export_progress[export_id].get("file_path")
+ if file_path and os.path.exists(file_path):
+ os.remove(file_path)
+ del self._export_progress[export_id]
+ if export_id in self._export_cancelled:
+ self._export_cancelled.remove(export_id)
+ return True
+ return False
+
def _run_export(self, export_id, bbox, min_zoom, max_zoom, name):
# bbox: [min_lon, min_lat, max_lon, max_lat]
min_lon, min_lat, max_lon, max_lat = bbox
@@ -206,7 +222,15 @@ class MapManager:
for x in range(x1, x2 + 1):
for y in range(y1, y2 + 1):
- # check if we should stop (if we add a cancel mechanism)
+ # check if we should stop
+ if export_id in self._export_cancelled:
+ conn.close()
+ if os.path.exists(dest_path):
+ os.remove(dest_path)
+ if export_id in self._export_progress:
+ del self._export_progress[export_id]
+ self._export_cancelled.remove(export_id)
+ return
# download tile
tile_url = f"https://tile.openstreetmap.org/{z}/{x}/{y}.png"
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────